iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0

例外

  1. 錯誤發生階段
  • 程式的撰寫勢必有一些錯誤產生,而錯誤會出現的時機常見為以下兩種狀況。
    (1) 設計時期錯誤: 這類錯誤在編譯實就會發現,因為有錯就會編譯不過。
    (2) 執行時期錯誤: 即使編譯通過了,在執行時還是很容易會發生錯誤,此類便稱為執行時期錯誤。
    以下為範例參考:
public class Alex0929_1
    public static void main(String[] args) {
        int[] a = {3, 5, 0};
        for( int i=0; i<=3, i++ )
            System.out.println( a[i] );
}    }

以下為執行時錯誤的顯示:

3
5
0
Exception in thread "main"java.util.lang.ArrayIndexOutOfBoundsException:
Index 3 out of bounds for length 3 at Alex0929_1.main(Alex0929_1.java.5)

其中「ArrayIndexOutOfBoundsException」表示超過陣列的索引值。
2.錯誤發生狀況
(1) 陣列超過索引值
(2) 虛值情況
(3) 使用者輸入不正確的類型
(4) 程式運作中的問題
(5) 輸入/輸出異常
(6) 計算錯誤
以下為程式範例:

import java.util.*;
public class Alex0929_2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("請輸入分子數:");
        int a = scanner.nextInt();
        System.out.print("請輸入分母數:");
        int b = scanner.nextInt();
        if(b! =0)
            System.out.println(a+"除以"+b+"等於"+(a/b));
        else
            System.out.println("除數不可為0");
    }
}

在這個程式中,為了避免分母為0導致計算錯誤的狀況,透過增加if判斷式,去避免錯誤的發生。

例外類別

  • Java有一個特別的例外處理機制,可以協助我們攔截程式執行時期的錯誤,以便能進一步處理系統能提前恢復的錯誤,而Java的例外類別可以分為兩種。
    (1) 受檢例外:屬於就算程式正確,也可能產生的例外種類。
例外類型 產生原因
ClassNotFoundException 找不到指南的類別。
CloneNotSupportException 在類別中使用clone()方法,但該類別並未實作Cloneable介面。
FileNotFoundException 找不到指定的檔案。
InterruptedException 另一個執行緒試圖使用interrupt()方法來中斷以停止執行的執行緒。
IOEException 檔案、網路...的輸出、入錯誤實產生的例外。

(2) 非受檢例外:通常是發生在程式執行時期,因為資料處理或運算的問題而發生的例外狀況。

例外類型 產生原因
ArithmeticException 運算式產生的例外,例如:除數為0。
ArrayStoreException 指定陣列內容時產生的錯誤。
ArrayIndexOutOfBoundException 陣列的索引值指定超出索引範圍的錯誤。
ClassCastException 類別轉型錯誤。
lllegalArgumentException 呼叫執行方法時,傳遞錯誤的引數。
IndexOutOfBoundsException 索引使用時超出範圍。
NullPointerException 使用物件時,該物件的參考值為null。
NumberFormatException 將字串轉換為文字時,產生無法轉換的錯誤。
SecurityException 違反安全性的限制。

上一篇
Java程式陣列-進階3
下一篇
Javat程式-例外處理
系列文
自學Java物件導向程式語言30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言